package com.qf.kdxf.util.common;

import java.io.*;

/**
 * 文件操作工具类
 */
public class FileUtil {
	/**
	 * 读取文件内容为二进制数组
	 *
	 *  用于读取指定文件的内容，并将其转换为二进制数组返回
	 * @param filePath
	 * @return
	 * @throws IOException
	 */
	public static byte[] read(String filePath)  {

		InputStream in = null;
		byte[] data = null;
		try {
			in = new FileInputStream(filePath);
			data = inputStream2ByteArray(in);
			in.close();
		} catch (Exception e) {
			e.printStackTrace();
		}


		return data;
	}

	/**
	 * 流转二进制数组
	 *
	 * 方法用于将输入流转换为二进制数组。
	 * @param in
	 * @return
	 * @throws IOException
	 */
	private static byte[] inputStream2ByteArray(InputStream in) throws IOException {

		ByteArrayOutputStream out = new ByteArrayOutputStream();
		byte[] buffer = new byte[1024 * 4];
		int n = 0;
		while ((n = in.read(buffer)) != -1) {
			out.write(buffer, 0, n);
		}
		return out.toByteArray();
	}

	/**
	 * read2ByteArray(String filePath)` 方法是 `read(String filePath)` 方法的另一种实现方式，用于读取指定文件的内容并返回二进制数组
	 * @param filePath
	 * @return
	 * @throws IOException
	 */
	//handwritten
	public static byte[] read2ByteArray(String filePath) throws IOException {
		InputStream in = new FileInputStream(filePath);
		byte[] data = inputStream2ByteArray(in);
		in.close();
		return data;
	}

	/**
	 * `inputStreamByteArray(InputStream in)` 方法是 `inputStream2ByteArray(InputStream in)` 方法的另一种实现方式，用于将输入流转换为二进制数组。
	 * @param in
	 * @return
	 * @throws IOException
	 */
	private static byte[] inputStreamByteArray(InputStream in) throws IOException {
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		byte[] buffer = new byte[4096];
		boolean var3 = false;

		int n;
		while((n = in.read(buffer)) != -1) {
			out.write(buffer, 0, n);
		}

		return out.toByteArray();
	}


	/**
	 * 保存文件
	 * 用于保存二进制数组内容到指定的文件路径和文件名。
	 * @param filePath
	 * @param fileName
	 * @param content
	 */
	public static void save(String filePath, String fileName, byte[] content) {
		try {
			File filedir = new File(filePath);
			if (!filedir.exists()) {
				filedir.mkdirs();
			}
			File file = new File(filedir, fileName);
			OutputStream os = new FileOutputStream(file);
			os.write(content, 0, content.length);
			os.flush();
			os.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}



}
